package com.future.controller;

import com.future.allUtils.constants.PermissionConstants;
import com.future.domain.Result;
import com.future.domain.Tag;
import com.future.service.TagService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/tag")
public class TagController {
    @Autowired
    private TagService tagService;
    /**
     * 保存标签(教师、心理医生、管理员)
     * @param name 标签名称
     * @return 操作结果
     */
    @PostMapping("/save")
    @PreAuthorize("hasAnyAuthority('超级管理员','教师','心理医生')")
    public Result saveTag(String name) {
        return tagService.saveTag(name);
    }
    /**
     * 根据名称查询标签ID
     * @param name 标签名称
     * @return 标签ID
     */
    @GetMapping("/select")
    public Long selectTagIdByName(String name) {
        return tagService.selectTagIdByName(name);
    }
    /**
     * 根据名称查询标签ID列表
     * @param tagNames 标签名称列表
     * @return 标签ID列表
     */
    @GetMapping("/selectIds")
    public List<Long> selectTagIdsByNames(@RequestParam List<String> tagNames) {
        return tagService.selectTagIdsByNames(tagNames);
    }
    /**
     * 查询所有标签
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @return 标签列表
     */
    @GetMapping("/selectByPage")
    public Result selectByPage(@RequestParam(defaultValue = "1") Integer pageNum,
                               @RequestParam(defaultValue = "10") Integer pageSize) {
        return tagService.selectByPage(pageNum, pageSize);
    }
    /**
     * 删除标签
     * @param id 标签ID
     * @return 操作结果
     */
    @DeleteMapping("/delete")
    @PreAuthorize("hasAnyAuthority('超级管理员','教师','心理医生')")
    public Result deleteTag(@RequestParam Long id) {
        return tagService.deleteTag(id);
    }
    /**
     * 更新标签
     * @param tag 标签对象
     * @return 操作结果
     */
    @PutMapping("/update")
    @PreAuthorize("hasAnyAuthority('超级管理员','教师','心理医生')")
    public Result updateTag(@RequestBody Tag tag) {
        return tagService.updateTag(tag);
    }
    /**
     * 根据ID查询标签
     * @param tagId 标签ID
     * @return 标签对象
     */
    @GetMapping("/selectById")
    public Result selectTagById(@RequestParam Long tagId) {
        return tagService.selectTagById(tagId);
    }
    /**
     * 根据ID查询标签名称列表
     * @param tagIds 标签ID列表
     * @return 标签名称列表
     */
    @GetMapping("/selectNamesByIds")
    public Result selectTagNameByIds(@RequestParam List<Long> tagIds) {
        return tagService.selectTagNameByIds(tagIds);
    }
}
